package com.gopay.common.exception;


import com.gopay.common.constants.proccode.ProcCodeEnum;
import org.apache.commons.lang3.StringUtils;

/**
 * 基金专用异常，优化了国付宝异常实现
 * @author dong-wang5@hnair.com
 * @date 2017-12-08 14:21:01
 */
public class FundException extends GopayException {

    private static final long serialVersionUID = 5088270223274078374L;

    /** * 包装不对外异常信息 */
    protected String debugMsg = null;

    public FundException() {
        super();
    }

    public FundException(String errCode, String errMsg) {
        super(errMsg);
        this.errCode = errCode;
        this.errMsg = errMsg;
    }

    public FundException(ProcCodeEnum procCodeEnum) {
        super(procCodeEnum.getCode(),procCodeEnum.getMsg());
        this.errCode = procCodeEnum.getCode();
        this.errMsg = procCodeEnum.getMsg();
    }

    public FundException(ProcCodeEnum procCodeEnum, String debugMsg) {
        super(procCodeEnum.getCode(),procCodeEnum.getMsg()+"（"+debugMsg+"）");
        this.errCode = procCodeEnum.getCode();
        this.errMsg = procCodeEnum.getMsg();
        this.debugMsg = debugMsg;
    }

    /**
     * 封装对商户不可见的异常
     * procCodeEnum 对外包装的异常
     * procCodeInnerEnum：对内暴露的明确异常
     * @author <a href="mailto:yhwpeng@126.com">wangdong</a>
     * @date 2017-09-29 15:37:59
     */
    public FundException(ProcCodeEnum procCodeEnum, ProcCodeEnum procCodeInnerEnum) {
        super(procCodeInnerEnum.getMsg());
        this.errCode = procCodeEnum.getCode();
        this.errMsg = procCodeEnum.getMsg();
        this.debugMsg = procCodeInnerEnum.getMsg();
    }

    /**
     * 封装对商户不可见的异常
     * procCodeEnum 对外包装的异常
     * procCodeInnerEnum：对内暴露的明确异常
     * debugMsg：错误真实原因
     * @author <a href="mailto:yhwpeng@126.com">wangdong</a>
     * @date 2017-09-29 15:37:59
     */
    public FundException(ProcCodeEnum procCodeEnum, ProcCodeEnum procCodeInnerEnum, String debugMsg) {
        super(procCodeInnerEnum.getMsg()+"（"+debugMsg+"）");
        this.errCode = procCodeEnum.getCode();
        this.errMsg = procCodeEnum.getMsg();
        this.debugMsg = procCodeInnerEnum.getMsg()+"（"+debugMsg+"）";
    }

    public FundException(String errCode, String errMsg , String debugMsg) {
        super(errMsg+"（"+debugMsg+"）");
        this.errCode = errCode;
        this.errMsg = errMsg;
        this.debugMsg = debugMsg;
    }

    public FundException(String errCode, String errMsg, Exception e) {
        super(errMsg, e);
        this.errCode = errCode;
        this.errMsg = errMsg;
    }

    @Override
    public String toString() {
        StringBuffer sb = new StringBuffer();
        if (StringUtils.isNotBlank(errCode)){
            sb.append("errCode：");
            sb.append(errCode);
        }
        if (StringUtils.isNotBlank(errMsg)){
            sb.append(">>>errMsg：");
            sb.append(errMsg);
        }
        if (StringUtils.isNotBlank(debugMsg)){
            sb.append(">>>debugMsg：");
            sb.append(debugMsg);
        }
        String message = getLocalizedMessage();
        if (StringUtils.isNotBlank(message)){
            sb.append(">>>exceptionMsg：");
            sb.append(message);
        }
        return sb.toString();
    }

    public String getDebugMsg() {
        return debugMsg;
    }

}
